//
//  UIButton+YSCountDown.m
//  YSKitExample
//
//  Created by Kyson on 2017/6/16.
//  Copyright © 2017年 YangShen. All rights reserved.
//

#import "UIButton+YSCountDown.h"
#import <objc/runtime.h>

static NSString *const kBackgroundColor = @"BackgroundColor";

@implementation UIButton (YSCountDown)

- (void)ys_startTime:(NSInteger)timeout title:(NSString *)title waitTitle:(NSString *)waitTitle {
    objc_setAssociatedObject(self, &kBackgroundColor, self.backgroundColor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    
    self.backgroundColor = [UIColor grayColor];
    __block NSInteger timeOut = timeout;
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_source_t _timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, queue);
    dispatch_source_set_timer(_timer, dispatch_walltime(NULL, 0), 1.0 * NSEC_PER_SEC, 0); // 每秒执行
    
    dispatch_source_set_event_handler(_timer, ^{
        if (timeOut <= 0) { // 倒计时结束， 关闭
            dispatch_source_cancel(_timer);
            dispatch_async(dispatch_get_main_queue(), ^{
                [self setTitle:title forState:UIControlStateNormal];
                self.userInteractionEnabled = YES;
                self.backgroundColor = [UIColor grayColor];
                UIColor *backColor = objc_getAssociatedObject(self, &kBackgroundColor);
                self.backgroundColor = backColor;
            });
        }else {
            int seconds = timeOut % 60;
            NSString *strTime = [NSString stringWithFormat:@"%.2d", seconds];
            dispatch_async(dispatch_get_main_queue(), ^{
                [self setTitle:[NSString stringWithFormat:@"%@%@",strTime,waitTitle] forState:UIControlStateNormal];
                self.userInteractionEnabled = NO;
            });
            timeOut--;
        }
    });
    dispatch_resume(_timer);
}

@end
